package com.dhcc.DRGsHosp.facade.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.inject.Named;

import org.springframework.beans.factory.annotation.Autowired;

import com.dhcc.DRGsHosp.application.CaseAnalysisApplication;
import com.dhcc.DRGsHosp.facade.CaseAnalysisFacade;
import com.dhcc.DRGsHosp.facade.DrgsIndexCalFacade;
import com.dhcc.DRGsHosp.facade.dto.IndexCalDTO;
import com.dhcc.DRGsHosp.facade.impl.assembler.IndexCalAssembler;
import com.dhcc.DRGsHosp.infra.util.DrgsIndex;
import com.dhcc.DRGsHosp.infra.util.StringUtils;

@Named("drgsHospFacadeImpl1")
public class CaseAnalysisFacadeImpl implements CaseAnalysisFacade {
	SimpleDateFormat  dateFormater= new SimpleDateFormat("yyyy-MM-dd");//对日期格式进行转换
	@Autowired
	private CaseAnalysisApplication caseAnalysisApplication;

	@Autowired
	private DrgsIndexCalFacade drgsIndexCalFacade;

	@Override
	public List<Map<String, Object>> loadTotalHspOutCaseInfo(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
	    
		List<Map<String, Object>> listData = caseAnalysisApplication.loadTotalHspOutCaseInfo(IndexCalAssembler.toEntity(dto));
		return listData;
	}

	@Override
	public List<Map<String, Object>> loadTotalHspRiskGroupInfo(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
		
	    // 获取标杆定位id 
	    String stdId = drgsIndexCalFacade.getStdID(dto.getDateFrom(), dto.getDateTo());
	    dto.setStdId(stdId);
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
	    
		List<Map<String, Object>> listData = caseAnalysisApplication.loadTotalHspRiskGroupInfo(IndexCalAssembler.toEntity(dto));
		return listData;
	}

	@Override
	public List<Map<String, Object>> loadNotInDep(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
	    
		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
		List<Map<String,Object>> listData = caseAnalysisApplication.loadNotInDep(IndexCalAssembler.toEntity(dto));
		if (!listData.isEmpty()) {
			int l = listData.size();
			int i;
			for (i = 0; i < (l >= 5 ? 5 : l); i++) {
				Map<String,Object> objDep = listData.get(i);
				Map<String, Object> map = new HashMap<>();
				map.put("depName", objDep.get("DEPNAME"));
				map.put("depCode", objDep.get("DEPCODE"));
				map.put("caseCnt", objDep.get("CNT"));
				result.add(map);
			}
			if (l > 5) {
				int sum = 0;
				for (i = 5; i < l; i++) {
					Map<String,Object> objDep = listData.get(i);
					sum = sum + Double.valueOf(objDep.get("CNT")==null?"0":objDep.get("CNT").toString()).intValue();
				}
				Map<String, Object> map = new HashMap<>();
				map.put("depName", "其他");
				map.put("depCode", "qt");
				map.put("caseCnt", sum);
				result.add(map);
			}
		}
		return result;
	}
	
	@Override
	public List<Map<String, Object>> loadNotInDiagnosis(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		List<Map<String,Object>> listData = caseAnalysisApplication.loadNotInDiagnosis(IndexCalAssembler.toEntity(dto));
		if(!listData.isEmpty()){
			int l=listData.size();
			int i;
			for(i = 0; i < (l >= 5 ? 5 : l); i++){
				Map<String,Object> objDia = listData.get(i);
				Map<String,Object> map = new HashMap<>();
				map.put("icd10Code", objDia.get("ICD10CODE"));
				map.put("icd10Diag", objDia.get("ICD10DESC"));
				map.put("caseCnt", objDia.get("CNT"));
				result.add(map);
			}
			if (l > 5) {
				int sum = 0;
				for (i = 5; i < l; i++) {
					Map<String,Object> objDia = listData.get(i);
					sum = sum + Double.valueOf(objDia.get("CNT")==null?"0":objDia.get("CNT").toString()).intValue();
				}
				Map<String, Object> map = new HashMap<>();
				map.put("icd10Code", "qt");
				map.put("icd10Diag", "其他");
				map.put("caseCnt", sum);
				result.add(map);
			}
		}
		return result;
	}
	@Override
	public List<Map<String, Object>> loadNotInReason(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		result = caseAnalysisApplication.loadNotInReason(IndexCalAssembler.toEntity(dto));
		return result;
	}

	@Override
	public List<Map<String, Object>> notInDepCaseData(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
	    
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		result = caseAnalysisApplication.notInDepCaseData(IndexCalAssembler.toEntity(dto));
		return result;
	}
	@Override
	public List<Map<String, Object>> notInReasonCaseData(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		result = caseAnalysisApplication.notInReasonCaseData(IndexCalAssembler.toEntity(dto));
		return result;
	}
	@Override
	public List<Map<String, Object>> notInDiagCaseData(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		result = caseAnalysisApplication.notInDiagCaseData(IndexCalAssembler.toEntity(dto));
		return result;
	}
	@Override
	public List<Map<String, Object>> drgsDetail(IndexCalDTO dto) {
		dto.setDateFrom(DrgsIndex.formateDateFrom(dto.getDateFrom()));
		dto.setDateTo(DrgsIndex.formateDateTo(dto.getDateTo()));
		// 获取标杆定位id 
	    String stdId = drgsIndexCalFacade.getStdID(dto.getDateFrom(), dto.getDateTo());
	    dto.setStdId(stdId);
	    //获取分组方案
	    String verRegion = drgsIndexCalFacade.getGroupScheme();
	    dto.setVerRegion(verRegion);
		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
		result = caseAnalysisApplication.drgsDetail(IndexCalAssembler.toEntity(dto));
		return result;
	}
}
